home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 5.0 KB | 287 lines |
- 10 ' **********************
- 20 ' ** FRACTION **
- 30 ' **********************
- 40 '
- 50 CLEAR
- 60 SCREEN 0,0,0,0
- 70 CLS
- 80 KEY OFF
- 90 DEFDBL A-Z
- 100 LOCATE 1,28
- 110 PRINT "* * * FRACTIONS * * *
- 120 LOCATE 3,1
- 130 PRINT "Functions for two fractions ...
- 140 PRINT
- 150 PRINT TAB(22)"F1. Fraction 1 + Fraction 2
- 160 PRINT TAB(22)"F2. Fraction 1 - Fraction 2
- 170 PRINT TAB(22)"F3. Fraction 1 * Fraction 2
- 180 PRINT TAB(22)"F4. Fraction 1 / Fraction 2
- 190 PRINT
- 200 PRINT "Functions of two numbers ...
- 210 PRINT
- 220 PRINT TAB(22)"F5. Greatest common divisor
- 230 PRINT TAB(22)"F6. Least common multiple
- 240 PRINT TAB(22)"F7. Reduction to lowest terms
- 250 PRINT
- 260 PRINT "Function of one number ...
- 270 PRINT
- 280 PRINT TAB(22)"F8. Decimal to fraction approximation
- 290 PRINT TAB(22)"F9. Fraction to decimal conversion
- 300 PRINT
- 310 PRINT
- 320 PRINT TAB(22)"F10. Quit
- 330 LOCATE 25,22
- 340 PRINT "PRESS ANY SPECIAL FUNCTION KEY";
- 350 ON KEY(1) GOSUB 620
- 360 ON KEY(2) GOSUB 730
- 370 ON KEY(3) GOSUB 840
- 380 ON KEY(4) GOSUB 950
- 390 ON KEY(5) GOSUB 1060
- 400 ON KEY(6) GOSUB 1180
- 410 ON KEY(7) GOSUB 1300
- 420 ON KEY(8) GOSUB 1420
- 430 ON KEY(9) GOSUB 1790
- 440 ON KEY(10) GOSUB 1920
- 450 KEY(1) ON
- 460 KEY(2) ON
- 470 KEY(3) ON
- 480 KEY(4) ON
- 490 KEY(5) ON
- 500 KEY(6) ON
- 510 KEY(7) ON
- 520 KEY(8) ON
- 530 KEY(9) ON
- 540 KEY(10) ON
- 550 '
- 560 WHILE QUIT = NOT.YET
- 570 KEY.BUFFER.CLEAR$ = INKEY$
- 580 WEND
- 590 CLS
- 600 END
- 610 '
- 620 ' F1 Subroutine
- 630 FUN$ = "+"
- 640 SCREEN 0,0,1,1
- 650 GOSUB 1970
- 660 N = N1 * D2 + N2 * D1
- 670 D = D1 * D2
- 680 GOSUB 2400
- 690 GOSUB 2510
- 700 SCREEN 0,0,0,0
- 710 RETURN
- 720 '
- 730 ' F2 Subroutine
- 740 FUN$ = "-"
- 750 SCREEN 0,0,1,1
- 760 GOSUB 1970
- 770 N = N1 * D2 - N2 * D1
- 780 D = D1 * D2
- 790 GOSUB 2400
- 800 GOSUB 2510
- 810 SCREEN 0,0,0,0
- 820 RETURN
- 830 '
- 840 ' F3 Subroutine
- 850 FUN$ = "*"
- 860 SCREEN 0,0,1,1
- 870 GOSUB 1970
- 880 N = N1 * N2
- 890 D = D1 * D2
- 900 GOSUB 2400
- 910 GOSUB 2510
- 920 SCREEN 0,0,0,0
- 930 RETURN
- 940 '
- 950 ' F4 Subroutine
- 960 FUN$ = "/"
- 970 SCREEN 0,0,1,1
- 980 GOSUB 1970
- 990 N = N1 * D2
- 1000 D = D1 * N2
- 1010 GOSUB 2400
- 1020 GOSUB 2510
- 1030 SCREEN 0,0,0,0
- 1040 RETURN
- 1050 '
- 1060 ' F5 Subroutine
- 1070 SCREEN 0,0,1,1
- 1080 CLS
- 1090 LOCATE 7,14
- 1100 INPUT "Greatest common divisor. Enter 'A,B' ";A,B
- 1110 GOSUB 2740
- 1120 LOCATE 14,14
- 1130 PRINT "Greatest common divisor is ";GCD
- 1140 GOSUB 2670
- 1150 SCREEN 0,0,0,0
- 1160 RETURN
- 1170 '
- 1180 ' F6 Subroutine
- 1190 SCREEN 0,0,1,1
- 1200 CLS
- 1210 LOCATE 7,14
- 1220 INPUT "Least common multiple. Enter 'A,B' ";A,B
- 1230 GOSUB 2820
- 1240 LOCATE 14,14
- 1250 PRINT "Least common multiple is ";LCM
- 1260 GOSUB 2670
- 1270 SCREEN 0,0,0,0
- 1280 RETURN
- 1290 '
- 1300 ' F7 Subroutine
- 1310 SCREEN 0,0,1,1
- 1320 CLS
- 1330 LOCATE 7,14
- 1340 INPUT "Reduce to lowest terms. Enter 'A,B' ";N,D
- 1350 GOSUB 2400
- 1360 LOCATE 14,14
- 1370 PRINT "Reduced to lowest terms = ";N;" ";D
- 1380 GOSUB 2670
- 1390 SCREEN 0,0,0,0
- 1400 RETURN
- 1410 '
- 1420 ' F8 Subroutine
- 1430 SCREEN 0,0,1,1
- 1440 CLS
- 1450 LOCATE 7,9
- 1460 INPUT "Decimal to fraction conversion. Enter X ";X
- 1470 PRINT
- 1480 PRINT TAB(14)"Fraction"TAB(47)"Error from X"
- 1490 PRINT TAB(13)"-------------"TAB(44)"-----------------"
- 1500 T1 = 1
- 1510 T2 = 1
- 1520 T3 = 1
- 1530 T4 = INT(X)
- 1540 T5 = X - T4
- 1550 T7 = 0
- 1560 T8 = 0
- 1570 DIF = 1
- 1580 WHILE ABS(DIF) > 0
- 1590 NUM = T3 * T4 + T7
- 1600 DEN = T4 * T8 + T2
- 1610 DIF = NUM / DEN - X
- 1620 IF T5 = 0 THEN 1710
- 1630 T4 = INT(T1/T5)
- 1640 T6 = T5
- 1650 T5 = T1 - T4 * T5
- 1660 T1 = T6
- 1670 T7 = T3
- 1680 T3 = NUM
- 1690 T2 = T8
- 1700 T8 = DEN
- 1710 PRINT TAB(14)NUM;" / ";DEN;
- 1720 PRINT TAB(49);
- 1730 PRINT USING "+#.#^^^^" ;DIF
- 1740 WEND
- 1750 GOSUB 2670
- 1760 SCREEN 0,0,0,0
- 1770 RETURN
- 1780 '
- 1790 ' F9 Subroutine
- 1800 SCREEN 0,0,1,1
- 1810 CLS
- 1820 LOCATE 7,1
- 1830 PRINT "Enter a fraction,
- 1840 LINE INPUT "'numerator/denominator' ...";FR$
- 1850 GOSUB 2230
- 1860 LOCATE 12,30
- 1870 PRINT "= ";NF/DF
- 1880 GOSUB 2670
- 1890 SCREEN 0,0,0,0
- 1900 RETURN
- 1910 '
- 1920 ' F10 Subroutine
- 1930 QUIT = 1
- 1940 RETURN
- 1950 '
- 1960 ' Subroutine, input two fractions
- 1970 CLS
- 1980 LOCATE 7,1
- 1990 PRINT "Enter first fraction,
- 2000 LINE INPUT "'numerator/denominator' ...";FR$
- 2010 IF INSTR(FR$,".") = 0 THEN 2050
- 2020 BEEP
- 2030 PRINT TAB(40)"No decimal points please"
- 2040 GOTO 2000
- 2050 GOSUB 2230
- 2060 N1 = NF
- 2070 D1 = DF
- 2080 PRINT
- 2090 PRINT TAB(17)FUN$
- 2100 PRINT
- 2110 PRINT "Enter second fraction,
- 2120 LINE INPUT "'numerator/denominator' ...";FR$
- 2130 IF INSTR(FR$,".") = 0 THEN 2170
- 2140 BEEP
- 2150 PRINT TAB(40)"No decimal points please"
- 2160 GOTO 2120
- 2170 GOSUB 2230
- 2180 N2 = NF
- 2190 D2 = DF
- 2200 RETURN
- 2210 '
- 2220 ' Subroutine, FR$ to NF and DF
- 2230 IP = INSTR(FR$,",")
- 2240 IF IP = 0 THEN 2270
- 2250 MID$(FR$,IP,1) = "/"
- 2260 GOTO 2230
- 2270 IP = INSTR(FR$,"/")
- 2280 IF IP THEN 2310
- 2290 FR$ = FR$ + "/1"
- 2300 GOTO 2270
- 2310 NF = VAL(LEFT$(FR$,IP))
- 2320 DF = VAL(MID$(FR$,IP+1))
- 2330 IF INSTR(FR$,"N") THEN NF = N
- 2340 IF INSTR(FR$,"n") THEN NF = N
- 2350 IF INSTR(FR$,"D") THEN DF = D
- 2360 IF INSTR(FR$,"d") THEN DF = D
- 2370 RETURN
- 2380 '
- 2390 ' Subroutine, reduction of N and D to lowest terms
- 2400 A = N
- 2410 B = D
- 2420 GOSUB 2740
- 2430 N = N / GCD
- 2440 D = D / GCD
- 2450 IF SGN(D) > -1 THEN 2480
- 2460 N = -N
- 2470 D = -D
- 2480 RETURN
- 2490 '
- 2500 ' Subroutine, output of two fraction problem results
- 2510 CLS
- 2520 LOCATE 7,27
- 2530 PRINT N1;"/";D1;" ";FUN$;" ";N2;"/";D2
- 2540 LOCATE 10,30
- 2550 IF D <> 1 THEN 2580
- 2560 PRINT "= ";N
- 2570 GOTO 2630
- 2580 PRINT "= ";N;"/";D
- 2590 IF ABS(N) < D THEN 2630
- 2600 LOCATE 12,30
- 2610 NUM = VAL(LEFT$(STR$(N/D),INSTR(STR$(N/D),".")))
- 2620 PRINT "= ";NUM;" and ";N - NUM * D;"/";D
- 2630 GOSUB 2670
- 2640 RETURN
- 2650 '
- 2660 ' Subroutine, wait until user wants to proceed
- 2670 LOCATE 25,25
- 2680 PRINT "PRESS SPACE BAR TO CONTINUE";
- 2690 K$ = INKEY$
- 2700 IF K$ <> " " THEN 2690
- 2710 RETURN
- 2720 '
- 2730 ' Subroutine, greatest common divisor of A and B
- 2740 TEMP = A - B * INT(A/B)
- 2750 A = B
- 2760 B = TEMP
- 2770 IF TEMP THEN 2740
- 2780 GCD = A
- 2790 RETURN
- 2800 '
- 2810 ' Subroutine, least common multiple of A and B
- 2820 A2 = A
- 2830 B2 = B
- 2840 GOSUB 2740
- 2850 LCM = ABS(A2 * B2 / GCD)
- 2860 RETURN
-